package com.idea.zd.sys.train.collection;

import java.util.*;


public class SetTest {
    public static void main(String [] args){

        /**
         * HashSet 无序根据元素hashCode决定存储位置 不可重复
         */
        HashSet<String> hashSet = new HashSet();

        hashSet.add("h");
        hashSet.add("a");
        hashSet.add("s");
        hashSet.add("h");

        Iterator hashi = hashSet.iterator();

        while(hashi.hasNext()){
            String str = (String)hashi.next();
            System.out.println(str+":hashCode "+str.hashCode());
        }


        /**
         * LinkedHashSet 根据元素的HashCode决定元素存储位置，不可重复 但它同时用链表维护元素的次序，这样看起来是以插入元素顺序保存的。
         * 当遍历LinkedHashSet集合元素时，LinkedHashSet将会按无素添加顺序来访问集合。
         * LinkedHashSet需要维护元素的插入顺序，插入略低于HashSet,但在迭代时将有很好的性能，因为它以链表来维护内部顺序
         */
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

        linkedHashSet.add("l");
        linkedHashSet.add("i");
        linkedHashSet.add("n");
        linkedHashSet.add("k");
        linkedHashSet.add("e");
        linkedHashSet.add("d");
        linkedHashSet.add("h");
        linkedHashSet.add("a");
        linkedHashSet.add("s");
        linkedHashSet.add("h");

        Iterator linkedi = linkedHashSet.iterator();

        while(linkedi.hasNext()){
            String str = (String)linkedi.next();
            System.out.println(str+":hashCode "+str.hashCode());
        }

        /**
         * TreeSet可以确保集合元素处于排序状态
         */
        TreeSet sortSet = new TreeSet();
        sortSet.add(5);
        sortSet.add(3);
        sortSet.add(1);
        sortSet.add(4);

        Iterator i=sortSet.iterator();

        while(i.hasNext()){
            System.out.println(i.next());
        }


    }

}

